
<!doctype html>
<html lang="en">
<head>
	<meta charset="utf-8">
	<meta name="viewport" content="width=device-width">

	<title>File system\engine\action.php | OpenCart API API</title>
	<link rel="stylesheet" href="http://localhost\opencart-master/docs/api/assets/main.css">
	<script src="http://localhost\opencart-master/docs/api/assets/main.js" defer></script>
</head>

<body class="layout">
	<div class="layout-aside">
	<div class="menu">
			<div class="menu-section">
				<h3>Namespaces</h3>
	<ul>
			<li class="menuGroup-item active">
				<a href="http://localhost\opencart-master/docs/api/namespace-Opencart.html">Opencart</a>
	<ul>
			<li class="menuGroup-item">
				<a href="http://localhost\opencart-master/docs/api/namespace-Opencart.Admin.html">Admin</a>
			</li>
			<li class="menuGroup-item">
				<a href="http://localhost\opencart-master/docs/api/namespace-Opencart.Catalog.html">Catalog</a>
			</li>
			<li class="menuGroup-item active">
				<a href="http://localhost\opencart-master/docs/api/namespace-Opencart.System.html">System</a>
	<ul>
			<li class="menuGroup-item active">
				<a href="http://localhost\opencart-master/docs/api/namespace-Opencart.System.Engine.html">Engine</a>
			</li>
			<li class="menuGroup-item">
				<a href="http://localhost\opencart-master/docs/api/namespace-Opencart.System.Helper.html">Helper</a>
			</li>
			<li class="menuGroup-item">
				<a href="http://localhost\opencart-master/docs/api/namespace-Opencart.System.Library.html">Library</a>
			</li>
	</ul>
			</li>
	</ul>
			</li>
			<li class="menuGroup-item">
				<a href="http://localhost\opencart-master/docs/api/namespace-none.html">none</a>
			</li>
	</ul>
			</div>

		<div class="menu-section">
			<h3>Classes</h3>
			<ul>
					<li class="active">
						<a href="http://localhost\opencart-master/docs/api/Opencart.System.Engine.Action.html">
							Action
						</a>
					</li>
					<li>
						<a href="http://localhost\opencart-master/docs/api/Opencart.System.Engine.Autoloader.html">
							Autoloader
						</a>
					</li>
					<li>
						<a href="http://localhost\opencart-master/docs/api/Opencart.System.Engine.Config.html">
							Config
						</a>
					</li>
					<li>
						<a href="http://localhost\opencart-master/docs/api/Opencart.System.Engine.Controller.html">
							Controller
						</a>
					</li>
					<li>
						<a href="http://localhost\opencart-master/docs/api/Opencart.System.Engine.Event.html">
							Event
						</a>
					</li>
					<li>
						<a href="http://localhost\opencart-master/docs/api/Opencart.System.Engine.Factory.html">
							Factory
						</a>
					</li>
					<li>
						<a href="http://localhost\opencart-master/docs/api/Opencart.System.Engine.Loader.html">
							Loader
						</a>
					</li>
					<li>
						<a href="http://localhost\opencart-master/docs/api/Opencart.System.Engine.Model.html">
							Model
						</a>
					</li>
					<li>
						<a href="http://localhost\opencart-master/docs/api/Opencart.System.Engine.Proxy.html">
							Proxy
						</a>
					</li>
					<li>
						<a href="http://localhost\opencart-master/docs/api/Opencart.System.Engine.Registry.html">
							Registry
						</a>
					</li>
			</ul>
		</div>
	</div>
	</div>

	<div class="layout-main">
		<div class="layout-navbar">
	<nav class="navbar">
		<div class="navbar-left">
			<ul class="navbar-links">
				<li>
					<a href="http://localhost\opencart-master/docs/api/index.html">Overview</a>
				</li>
				<li>
					
						<a href="http://localhost\opencart-master/docs/api/namespace-Opencart.System.Engine.html">Namespace</a>
					
				</li>
<li class="active"><a href="http://localhost\opencart-master/docs/api/Opencart.System.Engine.Action.html">Class</a></li>				<li>
					<a href="http://localhost\opencart-master/docs/api/tree.html">Tree</a>
				</li>
			</ul>
		</div>
		<div class="navbar-right">
	<div class="search" data-elements="http://localhost\opencart-master/docs/api/assets/elements.js">
		<input class="search-input" placeholder="Search class, function or namespace" autofocus>
		<ul class="search-results"></ul>
	</div>
		</div>
	</nav>
		</div>

		<div class="layout-content">
	<table class="source"><tr id="1" class="source-line"><td><a class="source-lineNum" href="#1"> 1: </a></td><td><span class="php-tag">&lt;?php</span></td></tr><tr id="2" class="source-line"><td><a class="source-lineNum" href="#2"> 2: </a></td><td><span class="php-tag"></span><span class="php-comment">/**</span></td></tr><tr id="3" class="source-line"><td><a class="source-lineNum" href="#3"> 3: </a></td><td><span class="php-comment"> * @package     OpenCart</span></td></tr><tr id="4" class="source-line"><td><a class="source-lineNum" href="#4"> 4: </a></td><td><span class="php-comment"> *</span></td></tr><tr id="5" class="source-line"><td><a class="source-lineNum" href="#5"> 5: </a></td><td><span class="php-comment"> * @author      Daniel Kerr</span></td></tr><tr id="6" class="source-line"><td><a class="source-lineNum" href="#6"> 6: </a></td><td><span class="php-comment"> * @copyright   Copyright (c) 2005 - 2017, OpenCart, Ltd. (https://www.opencart.com/)</span></td></tr><tr id="7" class="source-line"><td><a class="source-lineNum" href="#7"> 7: </a></td><td><span class="php-comment"> * @license     https://opensource.org/licenses/GPL-3.0</span></td></tr><tr id="8" class="source-line"><td><a class="source-lineNum" href="#8"> 8: </a></td><td><span class="php-comment"> *</span></td></tr><tr id="9" class="source-line"><td><a class="source-lineNum" href="#9"> 9: </a></td><td><span class="php-comment"> * @see        https://www.opencart.com</span></td></tr><tr id="10" class="source-line"><td><a class="source-lineNum" href="#10">10: </a></td><td><span class="php-comment"> */</span></td></tr><tr id="11" class="source-line"><td><a class="source-lineNum" href="#11">11: </a></td><td><span class="php-kw">namespace</span> Opencart\System\Engine;</td></tr><tr id="12" class="source-line"><td><a class="source-lineNum" href="#12">12: </a></td><td><span class="php-comment">/**</span></td></tr><tr id="13" class="source-line"><td><a class="source-lineNum" href="#13">13: </a></td><td><span class="php-comment"> * Class Action</span></td></tr><tr id="14" class="source-line"><td><a class="source-lineNum" href="#14">14: </a></td><td><span class="php-comment"> *</span></td></tr><tr id="15" class="source-line"><td><a class="source-lineNum" href="#15">15: </a></td><td><span class="php-comment"> * @package Opencart\System\Engine</span></td></tr><tr id="16" class="source-line"><td><a class="source-lineNum" href="#16">16: </a></td><td><span class="php-comment"> */</span></td></tr><tr id="17" class="source-line"><td><a class="source-lineNum" href="#17">17: </a></td><td><span class="php-kw">class</span> Action {</td></tr><tr id="18" class="source-line"><td><a class="source-lineNum" href="#18">18: </a></td><td>	<span class="php-comment">/**</span></td></tr><tr id="19" class="source-line"><td><a class="source-lineNum" href="#19">19: </a></td><td><span class="php-comment">	 * @var string</span></td></tr><tr id="20" class="source-line"><td><a class="source-lineNum" href="#20">20: </a></td><td><span class="php-comment">	 */</span></td></tr><tr id="21" class="source-line"><td><a class="source-lineNum" href="#21">21: </a></td><td>	<span class="php-kw">private</span> string <span class="php-var">$route</span>;</td></tr><tr id="22" class="source-line"><td><a class="source-lineNum" href="#22">22: </a></td><td></td></tr><tr id="23" class="source-line"><td><a class="source-lineNum" href="#23">23: </a></td><td>	<span class="php-comment">/**</span></td></tr><tr id="24" class="source-line"><td><a class="source-lineNum" href="#24">24: </a></td><td><span class="php-comment">	 * @var string</span></td></tr><tr id="25" class="source-line"><td><a class="source-lineNum" href="#25">25: </a></td><td><span class="php-comment">	 */</span></td></tr><tr id="26" class="source-line"><td><a class="source-lineNum" href="#26">26: </a></td><td>	<span class="php-kw">private</span> string <span class="php-var">$method</span>;</td></tr><tr id="27" class="source-line"><td><a class="source-lineNum" href="#27">27: </a></td><td></td></tr><tr id="28" class="source-line"><td><a class="source-lineNum" href="#28">28: </a></td><td>	<span class="php-comment">/**</span></td></tr><tr id="29" class="source-line"><td><a class="source-lineNum" href="#29">29: </a></td><td><span class="php-comment">	 * Constructor</span></td></tr><tr id="30" class="source-line"><td><a class="source-lineNum" href="#30">30: </a></td><td><span class="php-comment">	 *</span></td></tr><tr id="31" class="source-line"><td><a class="source-lineNum" href="#31">31: </a></td><td><span class="php-comment">	 * @param string $route</span></td></tr><tr id="32" class="source-line"><td><a class="source-lineNum" href="#32">32: </a></td><td><span class="php-comment">	 */</span></td></tr><tr id="33" class="source-line"><td><a class="source-lineNum" href="#33">33: </a></td><td>	<span class="php-kw">public</span> <span class="php-kw">function</span> __construct(string <span class="php-var">$route</span>) {</td></tr><tr id="34" class="source-line"><td><a class="source-lineNum" href="#34">34: </a></td><td>		<span class="php-var">$route</span> = preg_replace(<span class="php-str">&#039;/[^a-zA-Z0-9_|\/\.]/&#039;</span>, <span class="php-str">&#039;&#039;</span>, <span class="php-var">$route</span>);</td></tr><tr id="35" class="source-line"><td><a class="source-lineNum" href="#35">35: </a></td><td></td></tr><tr id="36" class="source-line"><td><a class="source-lineNum" href="#36">36: </a></td><td>		<span class="php-var">$pos</span> = strrpos(<span class="php-var">$route</span>, <span class="php-str">&#039;.&#039;</span>);</td></tr><tr id="37" class="source-line"><td><a class="source-lineNum" href="#37">37: </a></td><td></td></tr><tr id="38" class="source-line"><td><a class="source-lineNum" href="#38">38: </a></td><td>		<span class="php-kw">if</span> (<span class="php-var">$pos</span> !== <span class="php-kw">false</span>) {</td></tr><tr id="39" class="source-line"><td><a class="source-lineNum" href="#39">39: </a></td><td>			<span class="php-var">$this</span>-&gt;route = substr(<span class="php-var">$route</span>, <span class="php-num">0</span>, <span class="php-var">$pos</span>);</td></tr><tr id="40" class="source-line"><td><a class="source-lineNum" href="#40">40: </a></td><td>			<span class="php-var">$this</span>-&gt;method = substr(<span class="php-var">$route</span>, <span class="php-var">$pos</span> + <span class="php-num">1</span>);</td></tr><tr id="41" class="source-line"><td><a class="source-lineNum" href="#41">41: </a></td><td>		} <span class="php-kw">else</span> {</td></tr><tr id="42" class="source-line"><td><a class="source-lineNum" href="#42">42: </a></td><td>			<span class="php-var">$this</span>-&gt;route = <span class="php-var">$route</span>;</td></tr><tr id="43" class="source-line"><td><a class="source-lineNum" href="#43">43: </a></td><td>			<span class="php-var">$this</span>-&gt;method = <span class="php-str">&#039;index&#039;</span>;</td></tr><tr id="44" class="source-line"><td><a class="source-lineNum" href="#44">44: </a></td><td>		}</td></tr><tr id="45" class="source-line"><td><a class="source-lineNum" href="#45">45: </a></td><td>	}</td></tr><tr id="46" class="source-line"><td><a class="source-lineNum" href="#46">46: </a></td><td></td></tr><tr id="47" class="source-line"><td><a class="source-lineNum" href="#47">47: </a></td><td>	<span class="php-comment">/**</span></td></tr><tr id="48" class="source-line"><td><a class="source-lineNum" href="#48">48: </a></td><td><span class="php-comment">	 * getId</span></td></tr><tr id="49" class="source-line"><td><a class="source-lineNum" href="#49">49: </a></td><td><span class="php-comment">	 *</span></td></tr><tr id="50" class="source-line"><td><a class="source-lineNum" href="#50">50: </a></td><td><span class="php-comment">	 * @return string</span></td></tr><tr id="51" class="source-line"><td><a class="source-lineNum" href="#51">51: </a></td><td><span class="php-comment">	 */</span></td></tr><tr id="52" class="source-line"><td><a class="source-lineNum" href="#52">52: </a></td><td>	<span class="php-kw">public</span> <span class="php-kw">function</span> getId(): string {</td></tr><tr id="53" class="source-line"><td><a class="source-lineNum" href="#53">53: </a></td><td>		<span class="php-kw">return</span> <span class="php-var">$this</span>-&gt;route;</td></tr><tr id="54" class="source-line"><td><a class="source-lineNum" href="#54">54: </a></td><td>	}</td></tr><tr id="55" class="source-line"><td><a class="source-lineNum" href="#55">55: </a></td><td></td></tr><tr id="56" class="source-line"><td><a class="source-lineNum" href="#56">56: </a></td><td>	<span class="php-comment">/**</span></td></tr><tr id="57" class="source-line"><td><a class="source-lineNum" href="#57">57: </a></td><td><span class="php-comment">	 * Execute</span></td></tr><tr id="58" class="source-line"><td><a class="source-lineNum" href="#58">58: </a></td><td><span class="php-comment">	 *</span></td></tr><tr id="59" class="source-line"><td><a class="source-lineNum" href="#59">59: </a></td><td><span class="php-comment">	 * @param \Opencart\System\Engine\Registry $registry</span></td></tr><tr id="60" class="source-line"><td><a class="source-lineNum" href="#60">60: </a></td><td><span class="php-comment">	 * @param array&lt;mixed&gt;                     $args</span></td></tr><tr id="61" class="source-line"><td><a class="source-lineNum" href="#61">61: </a></td><td><span class="php-comment">	 *</span></td></tr><tr id="62" class="source-line"><td><a class="source-lineNum" href="#62">62: </a></td><td><span class="php-comment">	 * @return mixed</span></td></tr><tr id="63" class="source-line"><td><a class="source-lineNum" href="#63">63: </a></td><td><span class="php-comment">	 */</span></td></tr><tr id="64" class="source-line"><td><a class="source-lineNum" href="#64">64: </a></td><td>	<span class="php-kw">public</span> <span class="php-kw">function</span> execute(\Opencart\System\Engine\Registry <span class="php-var">$registry</span>, <span class="php-kw">array</span> &amp;<span class="php-var">$args</span> = []) {</td></tr><tr id="65" class="source-line"><td><a class="source-lineNum" href="#65">65: </a></td><td>		<span class="php-comment">// Stop any magical methods being called</span></td></tr><tr id="66" class="source-line"><td><a class="source-lineNum" href="#66">66: </a></td><td>		<span class="php-kw">if</span> (substr(<span class="php-var">$this</span>-&gt;method, <span class="php-num">0</span>, <span class="php-num">2</span>) == <span class="php-str">&#039;__&#039;</span>) {</td></tr><tr id="67" class="source-line"><td><a class="source-lineNum" href="#67">67: </a></td><td>			<span class="php-kw">return</span> <span class="php-kw">new</span> \Exception(<span class="php-str">&#039;Error: Calls to magic methods are not allowed!&#039;</span>);</td></tr><tr id="68" class="source-line"><td><a class="source-lineNum" href="#68">68: </a></td><td>		}</td></tr><tr id="69" class="source-line"><td><a class="source-lineNum" href="#69">69: </a></td><td></td></tr><tr id="70" class="source-line"><td><a class="source-lineNum" href="#70">70: </a></td><td>		<span class="php-comment">// Create a key to store the controller object</span></td></tr><tr id="71" class="source-line"><td><a class="source-lineNum" href="#71">71: </a></td><td>		<span class="php-var">$key</span> = <span class="php-str">&#039;controller_&#039;</span> . str_replace(<span class="php-str">&#039;/&#039;</span>, <span class="php-str">&#039;_&#039;</span>, <span class="php-var">$this</span>-&gt;route);</td></tr><tr id="72" class="source-line"><td><a class="source-lineNum" href="#72">72: </a></td><td></td></tr><tr id="73" class="source-line"><td><a class="source-lineNum" href="#73">73: </a></td><td>		<span class="php-kw">if</span> (!<span class="php-var">$registry</span>-&gt;has(<span class="php-var">$key</span>)) {</td></tr><tr id="74" class="source-line"><td><a class="source-lineNum" href="#74">74: </a></td><td>			<span class="php-comment">// Initialize the class</span></td></tr><tr id="75" class="source-line"><td><a class="source-lineNum" href="#75">75: </a></td><td>			<span class="php-var">$controller</span> = <span class="php-var">$registry</span>-&gt;get(<span class="php-str">&#039;factory&#039;</span>)-&gt;controller(<span class="php-var">$this</span>-&gt;route);</td></tr><tr id="76" class="source-line"><td><a class="source-lineNum" href="#76">76: </a></td><td></td></tr><tr id="77" class="source-line"><td><a class="source-lineNum" href="#77">77: </a></td><td>			<span class="php-comment">// Store object</span></td></tr><tr id="78" class="source-line"><td><a class="source-lineNum" href="#78">78: </a></td><td>			<span class="php-var">$registry</span>-&gt;set(<span class="php-var">$key</span>, <span class="php-var">$controller</span>);</td></tr><tr id="79" class="source-line"><td><a class="source-lineNum" href="#79">79: </a></td><td>		} <span class="php-kw">else</span> {</td></tr><tr id="80" class="source-line"><td><a class="source-lineNum" href="#80">80: </a></td><td>			<span class="php-var">$controller</span> = <span class="php-var">$registry</span>-&gt;get(<span class="php-var">$key</span>);</td></tr><tr id="81" class="source-line"><td><a class="source-lineNum" href="#81">81: </a></td><td>		}</td></tr><tr id="82" class="source-line"><td><a class="source-lineNum" href="#82">82: </a></td><td></td></tr><tr id="83" class="source-line"><td><a class="source-lineNum" href="#83">83: </a></td><td>		<span class="php-comment">// If action cannot be executed, we return an action error object.</span></td></tr><tr id="84" class="source-line"><td><a class="source-lineNum" href="#84">84: </a></td><td>		<span class="php-kw">if</span> (<span class="php-var">$controller</span> <span class="php-kw">instanceof</span> \Exception) {</td></tr><tr id="85" class="source-line"><td><a class="source-lineNum" href="#85">85: </a></td><td>			<span class="php-kw">return</span> <span class="php-kw">new</span> \Exception(<span class="php-str">&#039;Error: Could not call route &#039;</span> . <span class="php-var">$this</span>-&gt;route . <span class="php-str">&#039;!&#039;</span>);</td></tr><tr id="86" class="source-line"><td><a class="source-lineNum" href="#86">86: </a></td><td>		}</td></tr><tr id="87" class="source-line"><td><a class="source-lineNum" href="#87">87: </a></td><td></td></tr><tr id="88" class="source-line"><td><a class="source-lineNum" href="#88">88: </a></td><td>		<span class="php-var">$callable</span> = [<span class="php-var">$controller</span>, <span class="php-var">$this</span>-&gt;method];</td></tr><tr id="89" class="source-line"><td><a class="source-lineNum" href="#89">89: </a></td><td></td></tr><tr id="90" class="source-line"><td><a class="source-lineNum" href="#90">90: </a></td><td>		<span class="php-kw">if</span> (is_callable(<span class="php-var">$callable</span>)) {</td></tr><tr id="91" class="source-line"><td><a class="source-lineNum" href="#91">91: </a></td><td>			<span class="php-kw">return</span> <span class="php-var">$callable</span>(...<span class="php-var">$args</span>);</td></tr><tr id="92" class="source-line"><td><a class="source-lineNum" href="#92">92: </a></td><td>		} <span class="php-kw">else</span> {</td></tr><tr id="93" class="source-line"><td><a class="source-lineNum" href="#93">93: </a></td><td>			<span class="php-kw">return</span> <span class="php-kw">new</span> \Exception(<span class="php-str">&#039;Error: Could not call route &#039;</span> . <span class="php-var">$this</span>-&gt;route . <span class="php-str">&#039;!&#039;</span>);</td></tr><tr id="94" class="source-line"><td><a class="source-lineNum" href="#94">94: </a></td><td>		}</td></tr><tr id="95" class="source-line"><td><a class="source-lineNum" href="#95">95: </a></td><td>	}</td></tr><tr id="96" class="source-line"><td><a class="source-lineNum" href="#96">96: </a></td><td>}</td></tr><tr id="97" class="source-line"><td><a class="source-lineNum" href="#97">97: </a></td><td></td></tr></table>
		</div>

		<div class="layout-footer">
			OpenCart API API documentation generated by <a href="https://www.apigen.org">ApiGen dev-master</a>
		</div>
	</div>

	<div class="layout-rest">
		<div class="navbar"></div>
	</div>
</body>
</html>
